home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Locale; import java.util.StringTokenizer; import java.util.Vector; import netscape.ldap.LDAPAttribute; import netscape.ldap.LDAPAttributeSet; import netscape.ldap.LDAPCompareAttrNames; import netscape.ldap.LDAPConnection; import netscape.ldap.LDAPControl; import netscape.ldap.LDAPException; import netscape.ldap.LDAPReferralException; import netscape.ldap.LDAPSearchConstraints; import netscape.ldap.LDAPSearchResults; import netscape.ldap.LDAPSortKey; import netscape.ldap.LDAPUrl; import netscape.ldap.controls.LDAPSortControl; import netscape.ldap.controls.LDAPVirtualListControl; import netscape.ldap.controls.LDAPVirtualListResponse; import netscape.ldap.util.ByteBuf; import netscape.ldap.util.GetOpt; import netscape.ldap.util.LDIF; import netscape.ldap.util.MimeBase64Encoder; public class LDAPSearch extends LDAPTool { private static boolean m_attrsonly; private static int m_deref; private static int m_scope = 2; private static int m_sizelimit; private static int m_timelimit; private static int verbose; private static String[] m_attrs = null; private static String m_base = "o=ace industry,c=us"; private static String m_filter = null; private static String m_sep = ":"; private static Vector m_sort = new Vector(); private static boolean m_sortOnServer; private static boolean m_tempFiles; private static int m_beforeCount; private static int m_afterCount; private static int m_index; private static int m_count; private static int m_vlvTokens; private static String m_searchVal = null; private static boolean m_foldLine = true; private static final int MAX_LINE = 77; private static PrintWriter m_pw; public static void main(String[] var0) { extractParameters(var0); if (!LDAPTool.m_justShow) { try { LDAPTool.m_client = new LDAPConnection(); LDAPTool.m_client.connect(LDAPTool.m_ldaphost, LDAPTool.m_ldapport); } catch (Exception var4) { System.err.println("Error: client connection failed!"); System.exit(0); } try { LDAPTool.m_client.authenticate(LDAPTool.m_version, LDAPTool.m_binddn, LDAPTool.m_passwd); } catch (Exception var3) { System.err.println(((Throwable)var3).toString()); System.exit(0); } dosearch(); m_pw.flush(); m_pw.close(); try { LDAPTool.m_client.disconnect(); } catch (Exception var2) { System.err.println(((Throwable)var2).toString()); } } System.exit(0); } private static void doUsage() { System.err.println("usage: LDAPSearch -b basedn [options] filter [attributes...]"); System.err.println("options"); System.err.println(" -h host LDAP server name or IP address"); System.err.println(" -p port LDAP server TCP port number"); System.err.println(" -V version LDAP protocol version number (default is 3)"); System.err.println(" -D binddn bind dn"); System.err.println(" -w password bind passwd (for simple authentication)"); System.err.println(" -v run in verbose mode"); System.err.println(" -n show what would be done but don't actually do it"); System.err.println(" -d level set LDAP debugging level to 'level'"); System.err.println(" -R do not automatically follow referrals"); System.err.println(" -O hop limit maximum number of referral hops to traverse"); System.err.println(" -H display usage information"); System.err.println(" -t write values to files"); System.err.println(" -A retrieve attribute names only"); System.err.println(" -F sep print 'sep' instead of '=' between attribute names and values"); System.err.println(" -S attr sort the results by attribute 'attr'"); System.err.println(" -s scope one of base, one, or sub (search scope)"); System.err.println(" -a deref one of never, always, search, or find (alias dereferencing)"); System.err.println(" -l timelimit time limit (in seconds) for search"); System.err.println(" -T do not fold (wrap) long lines (default is to fold)"); System.err.println(" -x perform sorting on server"); System.err.println(" -M manage references (treat them as regular entries)"); System.err.println(" -z sizelimit size limit (in entries) for search"); System.err.println(" -G before:after:index:count | before:after:value where 'before' and 'after' are the number of entries surrounding 'index'. 'count' is the content count, 'value' is the search value."); System.err.println(" -y proxy-DN DN to use for access control"); } protected static void extractParameters(String[] var0) { GetOpt var1 = LDAPTool.extractParameters("HATtxvna:b:F:l:s:S:z:G:", var0); if (var1.hasOption('H')) { doUsage(); System.exit(0); } if (var1.hasOption('A')) { m_attrsonly = true; } if (var1.hasOption('x')) { m_sortOnServer = true; } if (var1.hasOption('t')) { m_tempFiles = true; } if (var1.hasOption('F')) { m_sep = var1.getOptionParam('F'); } if (var1.hasOption('a')) { String var2 = var1.getOptionParam('a'); if (var2.equalsIgnoreCase("never")) { m_deref = 0; } else if (var2.equalsIgnoreCase("search")) { m_deref = 1; } else if (var2.equalsIgnoreCase("find")) { m_deref = 2; } else if (var2.equalsIgnoreCase("always")) { m_deref = 3; } else { System.err.println("Error: alias deref option should be never, search, find, or always."); } } if (var1.hasOption('b')) { m_base = var1.getOptionParam('b'); } if (var1.hasOption('S')) { m_sort.addElement(var1.getOptionParam('S')); } if (var1.hasOption('l')) { try { m_timelimit = Integer.parseInt(var1.getOptionParam('l')); } catch (NumberFormatException var7) { m_timelimit = 0; } } if (var1.hasOption('s')) { String var8 = var1.getOptionParam('s'); if (var8.equalsIgnoreCase("base")) { m_scope = 0; } else if (var8.equalsIgnoreCase("one")) { m_scope = 1; } else if (var8.equalsIgnoreCase("sub")) { m_scope = 2; } else { System.err.println("Error: scope should be base, one or sub."); } } if (var1.hasOption('z')) { try { m_sizelimit = Integer.parseInt(var1.getOptionParam('z')); } catch (NumberFormatException var6) { m_sizelimit = 0; } } if (var1.hasOption('T')) { m_foldLine = false; } parseVlv(var1); Enumeration var9 = var1.getParameters().elements(); Vector var3 = new Vector(); while(var9.hasMoreElements()) { var3.addElement(var9.nextElement()); } int var4 = var3.size(); if (var4 <= 0) { System.err.println("Error: must supply filter string!"); doUsage(); System.exit(0); } if (var4 == 1) { m_filter = (String)var3.elementAt(0); if (LDAPTool.m_verbose) { System.err.println("filter pattern: " + m_filter); } m_attrs = null; if (LDAPTool.m_verbose) { System.err.println("returning: ALL"); System.err.println("filter is: (" + m_filter + ")"); } } if (var4 > 1) { m_filter = (String)var3.elementAt(0); if (LDAPTool.m_verbose) { System.err.println("filter pattern: " + m_filter); System.err.print("returning:"); } m_attrs = new String[var4]; for(int var5 = 1; var5 < var4; ++var5) { m_attrs[var5 - 1] = (String)var3.elementAt(var5); if (LDAPTool.m_verbose) { System.err.print(" " + m_attrs[var5 - 1]); } } if (LDAPTool.m_verbose) { System.err.println(); System.err.println("filter is: (" + m_filter + ")"); } } } private static void parseVlv(GetOpt var0) { if (var0.hasOption('G')) { String var1 = var0.getOptionParam('G'); StringTokenizer var2 = new StringTokenizer(var1, ":"); m_vlvTokens = var2.countTokens(); if (m_vlvTokens < 3) { doUsage(); System.exit(0); } try { m_beforeCount = Integer.parseInt((String)var2.nextElement()); } catch (NumberFormatException var6) { m_beforeCount = 0; } try { m_afterCount = Integer.parseInt((String)var2.nextElement()); } catch (NumberFormatException var5) { m_afterCount = 0; } if (m_vlvTokens == 3) { m_searchVal = (String)var2.nextElement(); return; } if (m_vlvTokens > 3) { try { m_index = Integer.parseInt((String)var2.nextElement()); } catch (NumberFormatException var4) { m_index = 0; } try { m_count = Integer.parseInt((String)var2.nextElement()); return; } catch (NumberFormatException var3) { m_count = 0; return; } } } } private static void dosearch() { LDAPControl[] var0 = null; try { Vector var1 = new Vector(); LDAPSortControl var2 = null; if (m_sortOnServer && m_sort.size() > 0) { LDAPSortKey[] var3 = new LDAPSortKey[m_sort.size()]; for(int var4 = 0; var4 < var3.length; ++var4) { var3[var4] = new LDAPSortKey((String)m_sort.elementAt(var4)); } var2 = new LDAPSortControl(var3, true); var1.addElement(var2); } if (var2 == null && m_vlvTokens >= 3) { System.err.println("Server-side sorting is required for virtual list option"); doUsage(); System.exit(0); } LDAPVirtualListControl var10 = null; if (m_vlvTokens == 3) { var10 = new LDAPVirtualListControl(m_searchVal, m_beforeCount, m_afterCount); } else if (m_vlvTokens > 3) { var10 = new LDAPVirtualListControl(m_index, m_beforeCount, m_afterCount, m_count); } if (var10 != null) { var1.addElement(var10); } if (LDAPTool.m_proxyControl != null) { var1.addElement(LDAPTool.m_proxyControl); } if (LDAPTool.m_ordinary) { LDAPControl var12 = new LDAPControl("2.16.840.1.113730.3.4.2", true, (byte[])null); var1.addElement(var12); } if (var1.size() > 0) { var0 = new LDAPControl[var1.size()]; var1.copyInto(var0); } } catch (Exception var6) { System.err.println(((Throwable)var6).toString()); System.exit(0); } LDAPSearchResults var7 = null; try { LDAPSearchConstraints var8 = (LDAPSearchConstraints)LDAPTool.m_client.getSearchConstraints().clone(); var8.setServerControls(var0); var8.setDereference(m_deref); var8.setMaxResults(m_sizelimit); var8.setTimeLimit(m_timelimit); var8.setReferrals(LDAPTool.m_referrals); if (LDAPTool.m_referrals) { LDAPTool.setDefaultReferralCredentials(var8); } var8.setHopLimit(LDAPTool.m_hopLimit); var7 = LDAPTool.m_client.search(m_base, m_scope, m_filter, m_attrs, m_attrsonly, var8); } catch (Exception var5) { System.err.println(((Throwable)var5).toString()); System.exit(1); } if (m_sort.size() > 0 && !m_sortOnServer) { String[] var9 = new String[m_sort.size()]; for(int var11 = 0; var11 < var9.length; ++var11) { var9[var11] = (String)m_sort.elementAt(var11); } var7.sort(new LDAPCompareAttrNames(var9)); } printResults(var7); showControls(LDAPTool.m_client.getResponseControls()); } private static void printResults(LDAPSearchResults var0) { try { while(var0.hasMoreElements()) { Object var1 = null; try { var18 = var0.next(); } catch (LDAPReferralException var16) { LDAPUrl[] var3 = var16.getURLs(); System.err.println("Referral entries: "); for(int var4 = 0; var4 < var3.length; ++var4) { System.err.println("\t" + var3[var4].getUrl().toString()); } continue; } String var2 = var18.getDN(); if (var2 != null) { String var19 = "dn" + m_sep + " " + var2; if (m_foldLine) { LDIF.breakString(m_pw, var19, 77); } else { m_pw.print(var19); m_pw.print('\n'); } } else { String var20 = "dn" + m_sep; if (m_foldLine) { LDIF.breakString(m_pw, var20, 77); } else { m_pw.print(var20); m_pw.print('\n'); } } LDAPAttributeSet var21 = var18.getAttributeSet(); Enumeration var22 = var21.getAttributes(); while(var22.hasMoreElements()) { LDAPAttribute var5 = (LDAPAttribute)var22.nextElement(); String var6 = var5.getName(); if (m_attrsonly) { String var23 = var6 + ":"; if (m_foldLine) { LDIF.breakString(m_pw, var23, 77); } else { m_pw.print(var23); m_pw.print('\n'); } } else { Enumeration var7 = var5.getByteValues(); if (var7 != null) { while(var7.hasMoreElements()) { if (m_tempFiles) { try { FileOutputStream var8 = getTempFile(var6); var8.write((byte[])var7.nextElement()); } catch (Exception var15) { System.err.println("Error writing values of " + var6 + ", " + ((Throwable)var15).toString()); System.exit(1); } } else { byte[] var24 = (byte[])var7.nextElement(); Object var9 = null; if (LDIF.isPrintable(var24)) { String var25 = new String(var24, "UTF8"); String var10 = var6 + m_sep + " " + var25; if (m_foldLine) { LDIF.breakString(m_pw, var10, 77); } else { m_pw.print(var10); m_pw.print('\n'); } } else { ByteBuf var27 = new ByteBuf(var24, 0, var24.length); ByteBuf var11 = new ByteBuf(); MimeBase64Encoder var12 = new MimeBase64Encoder(); var12.translate(var27, var11); int var13 = var11.length(); if (var13 > 0) { String var26 = new String(var11.toBytes(), 0, var13); String var14 = var6 + ":: " + var26; if (m_foldLine) { LDIF.breakString(m_pw, var14, 77); } else { m_pw.print(var14); m_pw.print('\n'); } } else { m_pw.print(var6 + ": \n"); } } } } } else { System.err.println("Failed to do string conversion for " + var6); } } } m_pw.println(); } } catch (Exception var17) { System.err.println(((Throwable)var17).toString()); System.exit(0); } } private static void printString(String var0) { if (m_foldLine) { LDIF.breakString(m_pw, var0, 77); } else { m_pw.print(var0); m_pw.print('\n'); } } private static void showControls(LDAPControl[] var0) { if (var0 != null) { int[] var1 = new int[1]; String var2 = LDAPSortControl.parseResponse(var0, var1); if (var1[0] != 0) { System.err.println("Error code: " + var1[0]); if (var2 != null) { System.err.println("Offending attribute: " + var2); } else { System.err.println("No offending attribute returned"); } } else { m_pw.println("Server indicated results sorted OK"); } LDAPVirtualListResponse var3 = LDAPVirtualListResponse.parseResponse(var0); if (var3 != null) { int var4 = var3.getResultCode(); if (var4 == 0) { m_pw.println("Server indicated virtual list positioning OK"); m_pw.println("index " + var3.getFirstPosition() + " content count " + var3.getContentCount()); return; } System.err.println("Virtual List Error: " + LDAPException.errorCodeToString(var4, Locale.getDefault())); } } } private static FileOutputStream getTempFile(String var0) throws IOException { int var1 = 0; File var2; String var3; do { var3 = var0 + '.' + var1; var2 = new File(var3); ++var1; } while(var2.exists()); String var4 = var0 + m_sep + " " + var3; if (m_foldLine) { LDIF.breakString(m_pw, var4, 77); } else { m_pw.print(var4); m_pw.print('\n'); } return new FileOutputStream(var2); } static { m_pw = new PrintWriter(System.out); } }